package GUI;


import javax.swing.*;
import javax.swing.table.TableColumn;

import Projeto.*;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;


/**
 * @author Grupo 7N
 *
 */
public class MenuPrincipal implements MouseListener,ActionListener{

        private static JFrame janela;
        private static JLabel imagemFundo,nomeNovoUsuario,numeroRecomendacoes,selecioneAlgoritmo;
        private static JPanel painel;
        private static JButton botaoOpiniaoUsuario ,botaoPopularidade, botaoNovoUsuario,botaoVoltar,
        botaoRecomendacoesCadastrado,botaoGerarRecomendacoesNaoCadastrado,botaoSalvarPerfil,
        botaoVoltarCriarUsuario,botaoIndicarRecomendacoes;
        private static JTable  minhaTabela;
        private static JFileChooser caixaDialogoEstabelecimentos,caixaDialogoOpinioes;
        private static JScrollPane barra;
        private static JComboBox comboBoxSelecionarAlgoritmo,comboBoxUsuarios;
        private static JTextField textNome,textQuantIndicacoes;
        private static ImageIcon icone;
        private static boolean recomendacoes = false,usuarioExiste = false;
        int quantidadeRecomendacoes = 0;
        private static String arquivoOpinioes;
        private static List<Component> listaBotoesMenuPrincipal;
        private static List<String> listaVotosNovoUsuario,listaRecomendacoes;
        private static Iterator<Component> botoes;
        private static Iterator<Usuario> iteraUsuariosCadastrados;


        public static void main(String[] args) throws Exception {
                new MenuPrincipal();
        }

        /**
         * Construtor da classe
         * @throws Exception
         */
        private MenuPrincipal() throws Exception{
        		if (abreEstabelecimento()){
        			if (abreOpinioes()){
                        criaJanela();
                        adcionaBotoesMenuPrincipal();
                        addElementosJanela();
    				
        			}else{
        				System.exit(0);
        			}
        		}else{
        			System.exit(0);
        		}
        }

        /**
         * Definindo um frame(a janela do programa)
         */
        private static void criaJanela(){
                janela = new JFrame("Restaurant Selection - Version 0.2");
                janela.setSize(700, 665);
                janela.setMinimumSize(new Dimension(690, 640));
                janela.setVisible(true);
                janela.setResizable(false);
                janela.setLayout(new BorderLayout());
                janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                imagemFundo = new JLabel(new ImageIcon("fundo.jpg"));
                imagemFundo.setBounds(0,0,700,640);
                icone = new ImageIcon("icon.png");
                janela.setIconImage(icone.getImage());
                janela.setLocationRelativeTo(null);
                painel = new JPanel();
                painel.setLayout(null);

        }
        /**
         * Metodo que adciona ao frame um panel inicial
         */
        private static void addElementosJanela(){
                painel.add(imagemFundo);
                janela.add(painel,0);
                painel.updateUI();
        }

        /**
         * Metodo que cria e desenha os botoes do menu principal do programa
         */
        private void adcionaBotoesMenuPrincipal(){
                int contador = 0;
                listaBotoesMenuPrincipal = new ArrayList<Component>();
                botaoOpiniaoUsuario = new JButton("Opinioes de Usuarios");
                botaoPopularidade = new JButton("Restaurantes por Popularidade");
                botaoNovoUsuario = new JButton("Criar novo usuario");
                botaoRecomendacoesCadastrado = new JButton("Recomendacoes para Usuario Cadastrados");

                botaoOpiniaoUsuario.setToolTipText("Mostra opinioes dos usuarios sobre " +
                                "estabelecimentos cadastrados no sistema.");
                botaoPopularidade.setToolTipText("Mostra uma lista dos estabelecimentos ordenada" +
                                " por popularidade.");
                botaoNovoUsuario.setToolTipText("Criar um novo perfil de usuario");
                botaoRecomendacoesCadastrado.setToolTipText("Gerar Recomendacoes para Usuarios Cadastrados");

                listaBotoesMenuPrincipal.add(botaoOpiniaoUsuario);
                listaBotoesMenuPrincipal.add(botaoPopularidade);
                listaBotoesMenuPrincipal.add(botaoNovoUsuario);
                listaBotoesMenuPrincipal.add(botaoRecomendacoesCadastrado);
                

                botoes = listaBotoesMenuPrincipal.iterator();
                while(botoes.hasNext()){
                        JButton botaoAux = (JButton) botoes.next();
                        caracterizaBotoes(botaoAux);
                        botaoAux.setBounds(270, 150 + contador, 300, 20);
                        painel.add(botaoAux);
                        contador += 40;
                }
        }
        /**Metodo que cria uma caixa de dialogo e possibilita que o usuario selecione
         * o arquivo que contem os estabelecimentos.
         * 
         * @return boolean , true caso o arquivo for aberto corretamente e false caso contrario
         * @throws Exception
         */
        private boolean abreEstabelecimento() throws Exception {
                caixaDialogoEstabelecimentos = new JFileChooser();
                caixaDialogoEstabelecimentos.setFileFilter( new FiltraExtensao());
                caixaDialogoEstabelecimentos.setDialogTitle("Abrir dados dos estabelecimentos");
                if (caixaDialogoEstabelecimentos.showOpenDialog(janela) == JFileChooser.APPROVE_OPTION){
                    new LerListaEstabelecimentos(caixaDialogoEstabelecimentos.getSelectedFile().getName());                	
                    return true;
                }else{
                	return false;
                }
        }

        /**Metodo que cria uma caixa de dialogo e possibilita que o usuario selecione
         * o arquivo que contem as opinioes dos usuarios sobre os estabelecimentos.
         * 
         * @return boolean , true caso o arquivo for aberto corretamente e false caso contrario
         * @throws Exception
         */
        private boolean abreOpinioes() throws Exception{
                caixaDialogoOpinioes = new JFileChooser();
                caixaDialogoOpinioes.setFileFilter( new FiltraExtensao());
                caixaDialogoOpinioes.setDialogTitle("Abrir dados das opinioes dos usuarios");
                if (caixaDialogoOpinioes.showOpenDialog(janela)== JFileChooser.APPROVE_OPTION){
                	arquivoOpinioes = caixaDialogoOpinioes.getSelectedFile().getName();
                    new LerListaOpinioes(arquivoOpinioes);    
                    return true;
                }else{
                	return false;
                }
        }

        /**Metodo que cria um JTable e depedendo do menu configura a JTable
         * 
         * @param nomeMenu
         * @param numeroColunas
         * @throws Exception
         */
        private void criaTabela(String nomeMenu,int numeroColunas) throws Exception{
                Iterator<String> iteraOpinioes = LerListaOpinioes.rank.values().iterator();
                Iterator<Integer> iteraPopularidade = LerListaOpinioes.rank.keySet().iterator();
                iteraUsuariosCadastrados = LerListaOpinioes.listaUsuarios.iterator();
                barra = new JScrollPane();
                barra.setBounds(255, 230, 380, 350);
       
                if (nomeMenu.equals("menuPopularidade")){
                		minhaTabela = new JTable(LerListaOpinioes.rank.values().size(),numeroColunas);
                        minhaTabela.getColumnModel().getColumn(0).setHeaderValue("Estabelecimentos");
                        for (int i = 0; i <(LerListaOpinioes.rank.values().size() ) && iteraOpinioes.hasNext();i++){
                                minhaTabela.setValueAt(iteraOpinioes.next(), i, 0);//(valor,linha,coluna
                                minhaTabela.setValueAt(iteraPopularidade.next(), i, 1);
                                minhaTabela.getColumnModel().getColumn(1).setHeaderValue("Popularidade");
                        }
                        
                        barra.setBounds(255, 230, 380, 350);
                }else{ 
                	if (nomeMenu.equals("menuEstabelecimentos")){
                		minhaTabela = new JTable(LerListaOpinioes.listaUsuarios.size()+1,LerListaOpinioes.ordemEstabelecimentos.length -1);
                        //Definindo o tamanho da coluna
                        minhaTabela.getColumnModel().getColumn(0).setPreferredWidth(150);
                        minhaTabela.getColumnModel().getColumn(0).setHeaderValue("Usuarios");
                		for (int i = 2;i < LerListaOpinioes.ordemEstabelecimentos.length ;i++){
                			minhaTabela.setValueAt(LerListaOpinioes.ordemEstabelecimentos[i], 0, i-1);//(valor,linha,coluna
                			minhaTabela.getColumnModel().getColumn(i-1).setHeaderValue("Restaurante");
                        	}
                		for (int i = 1; i <= LerListaOpinioes.listaUsuarios.size(); i++){
                			int contadorAux = 1;
                			Usuario usuarioAux = iteraUsuariosCadastrados.next();
                			Iterator<String> iteraVotos = usuarioAux.getVotos().iterator();
                			minhaTabela.setValueAt(usuarioAux.getNome(), i, 0);//(valor,linha,coluna  
                			while(iteraVotos.hasNext()){
                				minhaTabela.setValueAt(iteraVotos.next(), i,contadorAux);
                                minhaTabela.getColumnModel().getColumn(contadorAux).setPreferredWidth(130);
                				contadorAux++;
                				}
                			}
                		          
                }else{ if (nomeMenu.equals("menuCriarUsuario")){
                		minhaTabela = new JTable(LerListaOpinioes.rank.values().size(),numeroColunas);
                		
                        minhaTabela.getColumnModel().getColumn(0).setHeaderValue("Estabelecimentos");
                		for (int i = 2; i < (LerListaOpinioes.rank.values().size() + 2 ) ;i++){
                                minhaTabela.setValueAt(LerListaOpinioes.ordemEstabelecimentos[i], i - 2, 0);//(valor,linha,coluna
                                }
                           TableColumn coluna = minhaTabela.getColumnModel().getColumn(1);
                           minhaTabela.getColumnModel().getColumn(1).setHeaderValue("Seu Voto");
                           MeuComboBox meuComboBox = new MeuComboBox(new String []{"-5: Detesto",
                           "-4: Acho muito ruim","-3: Acho bastante ruim",
                           "-2: Acho ruim","-1: Acho um pouco ruim","0: Nao Conheco","1: Nao é ruim",
                           "2: É bonzinho","3: Bastante bom","4: Muito bom",
                           "5: Incrivel. sensacional. impressionante"});
                           coluna.setCellEditor(meuComboBox);                                     
                           for (int i = 0; i < (LerListaOpinioes.rank.values().size() );i++){
                        	   minhaTabela.setValueAt("0: Nao Conheço", i, 1);//(valor,linha,coluna
                               }
                           
                        }else{if (nomeMenu.equals("recomendacoes")){
                        	minhaTabela = new JTable(quantidadeRecomendacoes,numeroColunas);     
                            minhaTabela.getColumnModel().getColumn(0).setHeaderValue("Estabelecimentos");
                        	barra.setBounds(255, 320, 380, 280);
                        	minhaTabela.getColumnModel().getColumn(1).setHeaderValue("Localizacao");
                        	minhaTabela.getColumnModel().getColumn(2).setHeaderValue("Tipo de Prato");
                        	for (int i = 0; i < listaRecomendacoes.size() ;i++){
                                minhaTabela.setValueAt(listaRecomendacoes.get(i), i, 0);//(valor,linha,coluna
                                }
                        	
                       		}                        	
                        }
                	}
                }
                if (!nomeMenu.equals("menuEstabelecimentos")){
                    //Definindo o tamanho da coluna
                    minhaTabela.getColumnModel().getColumn(0).setPreferredWidth(250);
                    minhaTabela.getColumnModel().getColumn(1).setPreferredWidth(130);   
                   
                }

                minhaTabela.setFillsViewportHeight( true );
                // precisa pra poder ter barra horizontal
                minhaTabela.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
                barra.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
                barra.getViewport().add(minhaTabela);
                painel.add(barra,0);
                painel.validate();

        }

        /**Metodo que chama o 1 menu do programa
         * 
         * @throws Exception
         */
        private void menuOpinioesEstabelecimentos() throws Exception{
                criaTabela("menuEstabelecimentos",0);
        }
        /**
         * Metodo que cria um botao para que o usuario tenha opcao
         * de voltar ao menu anterior
         */
        private void VoltarMenuPrincipal(){
                botaoVoltar = new JButton("Voltar ao Menu Principal");
                caracterizaBotoes(botaoVoltar);
                botaoVoltar.setBounds(300, 150, 215, 20);
                painel.add(botaoVoltar,0);
        }
        /**Metodo que define a cor do botao e chama metodos de
         * tratamento de excessoes
         *
         * @param botao (JButton)
         */
        private void caracterizaBotoes(JButton botao){
                botao.addMouseListener(this);
                botao.addActionListener(this);
                botao.setBackground(new Color(246, 247, 203));

        }

        /**
         * Metodo que cria menu estabelecimentos por popularidade
         * @throws Exception
         */
        private void estabelecimentosPopularidade() throws Exception{
                criaTabela("menuPopularidade",2);
        }

        /**
         * Metodo caracteriza os elementos do menu de criar novo Perfil
         * @throws Exception
         */
        private void criarPerfil() throws Exception{
                nomeNovoUsuario = new JLabel("Seu Nome: ");
                botaoSalvarPerfil = new JButton("Salvar Perfil ");
                botaoGerarRecomendacoesNaoCadastrado = new JButton("Gerar Recomendacoes ");
                caracterizaBotoes(botaoSalvarPerfil);
                caracterizaBotoes(botaoGerarRecomendacoesNaoCadastrado);

                botaoGerarRecomendacoesNaoCadastrado.setBounds(270, 590, 200, 20);
                botaoSalvarPerfil.setBounds(480, 590, 150, 20);
                nomeNovoUsuario.setBounds(255, 195, 85, 10);

                textNome = new JTextField();
                textNome.addMouseListener(this);
                textNome.setBounds(335, 193, 100, 18);
                criaTabela("menuCriarUsuario",2);
                
                
                painel.add(nomeNovoUsuario, 0);
                painel.add(textNome,0);
                painel.add(botaoSalvarPerfil,0);
                painel.add(botaoGerarRecomendacoesNaoCadastrado,0);
        }
        
        /**Metodo que verifica se nome de novo usuario ja existe no sistema
         * 
         * @return boolean
         */
        private boolean verificaNomeExiste(){
        	iteraUsuariosCadastrados = LerListaOpinioes.listaUsuarios.iterator();
        	while (iteraUsuariosCadastrados.hasNext()){
        		if (iteraUsuariosCadastrados.next().getNome().equals(textNome.getText())){
        			return true;
        		}
        	}
        	return false;
        }
        /**
         * Metodo que ler a coluna da tabela que possui os votos do novo usuario
         */
        private void lerColunaVotos(){
        	listaVotosNovoUsuario = new ArrayList<String>();
        	for (int i = 0; i < minhaTabela.getRowCount(); i++){
        		listaVotosNovoUsuario.add((String) minhaTabela.getValueAt(i, 1));        		
        	}
        }
        
        /**Metodo que conta o numero de estabelecimentos que o usuario nao conhece
         * 
         * @param lista lista com votos do usuario
         * @return int contador
         */
        private int verficaNaoConhece(List<String> lista){
        	int contadorNaoConhece = 0;
        	Iterator<String> itera = lista.iterator();
        	while (itera.hasNext()){
        		if (itera.next().equals("0: Nao Conheco")){        			
        			contadorNaoConhece++;
        	}
        	}
        	return contadorNaoConhece;
        }

        /**
         * Metodo que chama os devidos metodos para que seja criada uma tabela de recomendacoes
         * @throws Exception
         */
        private void criaTabelaRecomendacoes() throws Exception{
        	recomendacoes = true;
        	quantidadeRecomendacoes = Integer.parseInt(textQuantIndicacoes.getText());
        	criaTabela("recomendacoes", 3);
        }
        /**
         * Metodo que cria elementos do menu de recomendacoes
         */
        private void telaRecomendacoes(){
        	numeroRecomendacoes = new JLabel("Quantas Indicacoes: ");
        	textQuantIndicacoes = new JTextField("0");
        	selecioneAlgoritmo = new JLabel("Selecione um Algoritmo: ");
        	textQuantIndicacoes.addMouseListener(this);
            textQuantIndicacoes.setBounds(420, 230, 50, 18);
        	numeroRecomendacoes.setBounds(270, 230, 150, 20);
        	selecioneAlgoritmo.setBounds(270, 260, 150, 20);
        	botaoIndicarRecomendacoes = new JButton("Recomendar");
        	caracterizaBotoes(botaoIndicarRecomendacoes);
        	botaoIndicarRecomendacoes.setBounds(270, 290, 150, 20);
        	painel.add(textQuantIndicacoes,0);
        	painel.add(numeroRecomendacoes, 0);
        	painel.add(selecioneAlgoritmo, 0);
        	painel.add(botaoIndicarRecomendacoes,0);
        	comboBoxAlgoritmo();
        	
        }
        /**
         * Metodo que cria um comboBox para o usuario selecionar o algoritmo desejado
         */
        private void comboBoxAlgoritmo(){
       		comboBoxSelecionarAlgoritmo = new JComboBox(new String []{"Popularidade Global","Personalizado"});
        	comboBoxSelecionarAlgoritmo.setBounds(420, 260, 150, 20);
       		painel.add(comboBoxSelecionarAlgoritmo,0);
       		painel.updateUI();
        }
        /**
         * Metodo que exibe menu e chama metodos que manipulam recomendacoes
         * para um usuario que ainda nao eh cadastrado no sistema
         */
        private void gerarRecomendacoesNaoCadastrado(){
        	usuarioExiste = false;
        	botaoVoltarCriarUsuario = new JButton("Criar Usuario Novamente");
        	caracterizaBotoes(botaoVoltarCriarUsuario);
        	botaoVoltarCriarUsuario.setBounds(300, 190, 215, 20);
        	painel.add(botaoVoltarCriarUsuario,0);
        	telaRecomendacoes();
        }
        /**
         * Metodo que exibe menu e chama metodos que manipulam recomendacoes
         * para um usuario ja cadastrado no sistema
         */
        private void gerarRecomendacoesCadastrado(){
        	usuarioExiste = true;
        	JLabel textSelecioneUsuario= new JLabel("Selecione um usuario: ");
        	textSelecioneUsuario.setBounds(270, 190, 150, 20);
        	comboBoxUsuarios = new JComboBox();
        	iteraUsuariosCadastrados = LerListaOpinioes.listaUsuarios.iterator();
        	while (iteraUsuariosCadastrados.hasNext()){
        		comboBoxUsuarios.addItem(iteraUsuariosCadastrados.next().getNome());
        	}
        	comboBoxUsuarios.setBounds(420, 190, 215, 20);
        	painel.add(textSelecioneUsuario,0);
        	painel.add(comboBoxUsuarios,0);
        	telaRecomendacoes();
        }
        /**
         * Metodo que verifica se o numero de estabelecimentos que o usuario nao conhece
         * eh maior que o numero de recomendacoes que ele solicitou
         * 
         * @param lista
         */
        private void verificaNaoConheceMaiorRecomendacoes(List<String> lista){
        	if(verficaNaoConhece(lista) < Integer.parseInt(textQuantIndicacoes.getText())){
				JOptionPane.showMessageDialog(null, "Quantidade pedida é maior que a de estabelecimentos nao " +
						"conhecidos pelo usuario ","",JOptionPane.ERROR_MESSAGE);
			}
        }
        /**
         * Metodo que remove elementos do menu de criar perfil
         */
        public void removeCriarPerfil(){
        	List<Component> removeTelaCriar = new ArrayList<Component> ();
        	removeTelaCriar.add(botaoGerarRecomendacoesNaoCadastrado);
        	removeTelaCriar.add(barra);
        	removeTelaCriar.add(botaoSalvarPerfil);
        	removeTelaCriar.add(nomeNovoUsuario);
        	removeTelaCriar.add(textNome);
        	removeDoPainel(removeTelaCriar);
        }
        
        /**
         * Metodo que recebe uma lista de componentes que devem ser
         * removidos do panel.
         * @param listaRemover
         */
        private void removeDoPainel(List<Component> listaRemover){
                Iterator<Component> remover =  listaRemover.iterator();
                while (remover.hasNext()){
                        painel.remove(remover.next());
                }
                painel.repaint();
        }


        @Override
        public void actionPerformed(ActionEvent evento) {
        	Date data = new Date();
                if (evento.getSource() == botaoOpiniaoUsuario){
                        try {
                                menuOpinioesEstabelecimentos();
                                removeDoPainel(listaBotoesMenuPrincipal);
                                VoltarMenuPrincipal();
                        } catch (Exception e) {
                                e.printStackTrace();
                        }
                }
                if (evento.getSource() == botaoPopularidade){
                        try {
                                estabelecimentosPopularidade();
                                removeDoPainel(listaBotoesMenuPrincipal);
                                VoltarMenuPrincipal();

                        } catch (Exception e) {
                                e.printStackTrace();
                        }

                }
                if (evento.getSource() == botaoNovoUsuario){
                        try {
                                removeDoPainel(listaBotoesMenuPrincipal);
                                VoltarMenuPrincipal();
                                criarPerfil();
                        } catch (Exception e) {
                                e.printStackTrace();
                        }

                }
                if (evento.getSource() == botaoVoltar){
                        painel.removeAll();
                        adcionaBotoesMenuPrincipal();
                        addElementosJanela();
                        recomendacoes = false;
                        janela.repaint();

                }
                
                if (evento.getSource() == botaoVoltarCriarUsuario){
                		painel.remove(botaoVoltarCriarUsuario);
                		painel.remove(textQuantIndicacoes);
                		painel.remove(barra);
                		painel.repaint();
                		painel.updateUI();
                		janela.repaint();
                		janela.validate();
                		recomendacoes = false;
                	 	VoltarMenuPrincipal();
                	 	try {
							criarPerfil();
						} catch (Exception e) {

							e.printStackTrace();
						}
                }
            	
                if (evento.getSource() == botaoRecomendacoesCadastrado){
                	removeDoPainel(listaBotoesMenuPrincipal);
                    VoltarMenuPrincipal();
                    gerarRecomendacoesCadastrado();
                    janela.repaint();
            }
                if (evento.getSource() == botaoGerarRecomendacoesNaoCadastrado){
                	VoltarMenuPrincipal();
                	removeCriarPerfil();
                	lerColunaVotos();
                	gerarRecomendacoesNaoCadastrado();
                	
                	
                }if (evento.getSource() == botaoIndicarRecomendacoes){
                	if (! textQuantIndicacoes.getText().matches("[0-9]*")){
                        JOptionPane.showMessageDialog(null, "Quantidade de indicacoes invalida! " +
                        		"Digite apenas numeros ([0-9]).","",JOptionPane.ERROR_MESSAGE);
                	}else{ if (Integer.parseInt(textQuantIndicacoes.getText())  > LerListaEstabelecimentos.listaRestaurantes.size()){
                        JOptionPane.showMessageDialog(null, "Quantidade de indicacoes excedeu o numero de " +
                        		"estabelecimentos conhecidos." ,"",JOptionPane.ERROR_MESSAGE);
                			}
                	else{
                		try {
                			if (comboBoxSelecionarAlgoritmo.getSelectedItem().equals("Popularidade Global")){
                				listaRecomendacoes = Recomendacoes.algoritmoPopularidade(Integer.parseInt(textQuantIndicacoes.getText()));
                			}else{
                				if (!usuarioExiste){
                					verificaNaoConheceMaiorRecomendacoes(listaVotosNovoUsuario);
                					listaRecomendacoes = Recomendacoes.algoritmoPersonalizado(Integer.parseInt(textQuantIndicacoes.getText()),new Usuario(textNome.getText(),listaVotosNovoUsuario,""));
                				}else{
                					Usuario cadastradoAuxiliar = null;
                					iteraUsuariosCadastrados = LerListaOpinioes.listaUsuarios.iterator();
                					while (iteraUsuariosCadastrados.hasNext()){
                						cadastradoAuxiliar = iteraUsuariosCadastrados.next();
                						if(cadastradoAuxiliar.getNome().equals(comboBoxUsuarios.getSelectedItem())){
                        					listaRecomendacoes = Recomendacoes.algoritmoPersonalizado(Integer.parseInt(textQuantIndicacoes.getText()),cadastradoAuxiliar);              							
                						}
                					}
                					verificaNaoConheceMaiorRecomendacoes(cadastradoAuxiliar.getVotos());
                				}
                			}
                			criaTabelaRecomendacoes();
                			
						} catch (Exception e) {
							e.printStackTrace();
						}
                	}
                	
                	}
                }
                
                if (evento.getSource() == botaoSalvarPerfil){
                	try {
						new LerListaOpinioes(arquivoOpinioes);
	                	if(verificaNomeExiste()){
	                		JOptionPane.showMessageDialog(null, "Nome Usuario ja utilizado.Modifique o nome.","",JOptionPane.ERROR_MESSAGE);

	                	}else{
	                		lerColunaVotos();
	                		Usuario usuarioTemporario = new Usuario(textNome.getText(),listaVotosNovoUsuario,data.toLocaleString());
	                		LerListaOpinioes.escreveNoArquivo(usuarioTemporario);
	                		JOptionPane.showMessageDialog(null, "Usuario Salvo com Sucesso!","",JOptionPane.PLAIN_MESSAGE);
	                		removeCriarPerfil();
	                		criarPerfil();
	                	}
                	} catch (Exception e) {
						e.printStackTrace();
					}	
                }


        }

        @Override
        public void mouseClicked(MouseEvent arg0) {

        }

        //Se o mouse passar/estiver encima
        @Override
        public void mouseEntered(MouseEvent arg0) {

        }
        //Mouse sair ou nao estiver mais encima
        @Override
        public void mouseExited(MouseEvent arg0) {
        	
        }

        @Override
        public void mousePressed(MouseEvent arg0) {

        }

        @Override
        public void mouseReleased(MouseEvent arg0) {

        }


}


class MeuComboBox extends DefaultCellEditor{
        public MeuComboBox(String[] valores){
                super(new JComboBox(valores));
        }
}